//
//  BKXHomeViewController.swift
//  微博
//
//  Created by 田凯 on 16/4/16.
//  Copyright © 2016年 田凯. All rights reserved.
//

import UIKit
private let HomeTableViewCellIdentifierId = "HomeTableViewCellIdentifierId"

class BKXHomeViewController: BKXVisitorViewController {

    // 保存微博数据数组
    var status: [CZStatus] = [CZStatus]()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        if !isLogin{
            visitorView?.setVisitorInfo(nil, titLe: nil)
            return
        }
        setupUI()
        setupTableViewInfo()
        // 请求微博首页数据
//        loadData {[weak self] (statuss) -> () in
//            // 01-赋值
//            self?.status = statuss
//            // 02-刷新UI
//            self?.tableView.reloadData()
//        }
//
    lodaStatusData(indicatorView.isAnimating())

    }
    
    func setupUI(){
    navigationController?.view.insertSubview(showMessageLabel, belowSubview: (navigationController?.navigationBar)!)
    showMessageLabel.frame = CGRect(x: 0, y: 64 - 34, width: ScreenW, height: 34)
    }

    private func setupTableViewInfo(){
        // 注册cell
        tableView.registerClass(CZStatusCell.self, forCellReuseIdentifier: HomeTableViewCellIdentifierId)
        // 设置cell高度
        // UITableViewAutomaticDimension 自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        // 预估行高 预估行高与我们实际的cell高度越接近越好
        tableView.estimatedRowHeight = 200
        // 设置风格
        tableView.separatorStyle = .None
        
        // 设置 footview
        tableView.tableFooterView = indicatorView
        tableView.addSubview(reflash)
        
        reflash.addTarget(self, action: "refreshAction", forControlEvents: UIControlEvents.ValueChanged)
//
    }
    @objc func refreshAction(){
//        print(indicatorView.isAnimating())
        print("要熟悉你了")
        
    lodaStatusData(indicatorView.isAnimating())
    
    }

    // MARK: - 懒加载底部菊花 控件
    private lazy var indicatorView: UIActivityIndicatorView = {
        let view = UIActivityIndicatorView(activityIndicatorStyle: UIActivityIndicatorViewStyle.WhiteLarge)
        // 设置菊花颜色
        view.color = ThemeColor
        view.sizeToFit()
        return view
        
        }()
    //系统的 上拉刷新
    private lazy var reflash: CZRefreshControl = CZRefreshControl()
    // 懒加载 显示刷新多少条新微博 控件
    private lazy var showMessageLabel: UILabel = {
        let lab = UILabel(textcolor: UIColor.whiteColor(), textFont: 14)
        
        lab.backgroundColor = ThemeColor
        lab.textAlignment = .Center
        lab.text = "已经是最新微博了"
        lab.hidden = true
        
        return lab
        }()
    
   
}


extension BKXHomeViewController{
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return status.count

    }
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        // 方法02 -  我们通过标识到缓存中取 如果取不到 系统帮我们创建一个cell 前提: 需要我们程序员自己注册cell
        // 性能高于我们第一种方法
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeTableViewCellIdentifierId, forIndexPath: indexPath) as! CZStatusCell
        
        
        cell.status = status[indexPath.row]
        
        return cell
        
    }
    
    override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
        
        
        if indexPath.row == status.count - 1 && !indicatorView.isAnimating() {
        indicatorView.startAnimating()
            lodaStatusData(indicatorView.isAnimating())
        
        }
        
    }
    
}


// MARK: - 请求微博首页数据
extension BKXHomeViewController{

    func lodaStatusData(isPullUp: Bool){
        
        
        var sinceId: Int64 = 0
        var maxId: Int64 = 0
        
        if isPullUp{
            sinceId = 0
            maxId = status.last?.id ?? 0
            if maxId > 0{
            maxId = maxId - 1
            
            }
        }else{
            sinceId = status.first?.id ?? 0
            maxId = 0
        
        
        }
        
    BKXNetworkTools.sharedTools.loadStatus(BKXUserAccountTools.sharedUserAccountTools.accessToken!, since_id: sinceId, max_id: maxId) { (reponce, error) -> () in
        self.endRefreshing()
        if error != nil{
            print(error)
            return
        }
        // 判断我们的得到的数据是否存在 而且是否是一个数组
        guard let array = reponce?["statuses"] as? [[String: AnyObject]] else{
            print("返回的数据不是一个数组")
            return
        } //        print(reponce)
        // 定义一个临时数组
        var tempArray: [CZStatus] = [CZStatus]()
        // 遍历数组 转模型
        for dic in array{
            let status = CZStatus(dict: dic)
            // 往数组中添加模型
            tempArray.append(status)
            
        }
//        
        if isPullUp{
        self.status = self.status + tempArray
        }else{
            //下拉刷新
        
            self.status = tempArray + self.status
            if self.showMessageLabel.hidden == true {
                self.setShowNewMessageCount(tempArray.count)

            }
            
            
        }
                self.tableView.reloadData()
        
        }
    
    
    }
    func endRefreshing(){
    self.indicatorView.stopAnimating()
    
        self.reflash.endRefreshing()
    }
    
    // 显示刷新有多少 的方法
    func setShowNewMessageCount(count: Int){
        
        showMessageLabel.hidden = false
        var couting = ""
        if count == 0{
        couting = "您已经是最新微博了"
            
        }else{
    couting = "你跟新了\(count)条微博"
        
        
        }
        
        showMessageLabel.text = couting
        
        //设置动画
        UIView.animateWithDuration(1, animations: { () -> Void in
            self.showMessageLabel.frame.origin.y = 64
            }) { (_) -> Void in
                UIView.animateWithDuration(1, animations: { () -> Void in
                    self.showMessageLabel.frame.origin.y = 64 - 34

                    }, completion: { (_) -> Void in
                        self.showMessageLabel.hidden = true
                })
                
        }
        
        
    
    }
    

}





//extension BKXHomeViewController{
//    func loadData(callback:(statuss: [CZStatus])->()){
//        // 请求url
//        let urlString = "https://api.weibo.com/2/statuses/home_timeline.json"
//        // 请求参数
//        let params = ["access_token": BKXUserAccountTools.sharedUserAccountTools.accessToken!]
//        
//        BKXNetworkTools.sharedTools.request(.GET, urlString: urlString, paramerent: params) { (response, error) -> () in
//            if error != nil{
//                print(error)
//                return
//            }
//            // 判断我们的得到的数据是否存在 而且是否是一个数组
//            guard let array = response?["statuses"] as? [[String: AnyObject]] else{
//                print("返回的数据不是一个数组")
//                return
//            }
//            // 定义一个临时数组
//            var tempArray:[CZStatus] = [CZStatus]()
//            // 遍历数组 转模型
//            for dic in array{
//                let status = CZStatus(dict: dic)
//                // 往数组中添加模型
//                tempArray.append(status)
//            }
//            // 执行闭包 告知外界我们的数据请求成功啦
//            callback(statuss: tempArray)
//        }
//        
//        
//        
//    }
//    
//}
//
